package 剑指offer;

import org.junit.Test;

public class _58_1翻转单词顺序 {
	@Test
	public void test() {
		System.out.println(reverseWords2("blue is sky the"));
	}
	
	/**
	 * 
	 *@time 2021年3月24日下午8:42:48
	 * 
	 *@param s
	 *@return String
	 *
	 *@see 
	 *
	 */
	  public String reverseWords(String s) {
		String []strs = s.trim().split(" ");
		StringBuilder sb = new StringBuilder();
		for (int i = strs.length-1; i>=0; i--) {
			if(strs[i].equals("")) continue;
			sb.append(strs[i]+" ");
		}
		  return sb.toString().trim();		  
	  }
	  /**
		 * 
		 *@time 2021年3月24日下午8:44:48
		 * 
		 *@param s
		 *@return String
		 *
		 *@see 这里的正则表达式是为了防止其中有多个空格
		 *这里简单的写法,正则表达式会消耗性能
		 */
    public String reverseWords1(String s) {
    	String []strs = s.split("\\s+");//正则表达式
    	StringBuilder sb = new StringBuilder();
    	for (int i = strs.length-1; i >= 0 ; i--) {
			sb.append(strs[i]+" ");
		}
    	//trim()的作用是去掉字符串两端的多余的空格
    	return sb.toString().trim();
    }
    /**
     * 
     *@time 2021年3月24日下午9:27:35
     * 
     *@param s
     *@return String
     *
     *@see双指针做
     *i指向单词的前面，j指向单词的最后一位
     *substring(start, end) 是从0开始算起的，end是不包括end
     */
    public String reverseWords2(String s) {
    	s = s.trim();
    	int i = s.length()-1,j = i;
    	StringBuilder sb = new StringBuilder();
    	while(i>=0) {
    		while(i >= 0 && s.charAt(i) != ' ') i--;
    		sb.append(s.substring(i+1, j+1)+" ");
    		while(i >= 0 && s.charAt(i) == ' ') i--;
    		j = i;
    	}
		return sb.toString().trim();    	
    }
}
